IMotion.SetAxisCyclicSwitch 方法
使用轴位置来控制重复触发数位输出的开关。当轴达到特定的位置,开关即开启或关闭,开关可透过轴向前或向后移动的方向来控制。
命名空间:IntervalZero.KINGSTAR.Base.Api组合: IntervalZero.KINGSTAR.Base.Api (于 IntervalZero.KINGSTAR.Base.dll) 版本:4.4.0.0
语法
KsCommandStatus SetAxisCyclicSwitch(
int Index,
McOutput Output,
double StartPosition,
McCamSwitch CyclicSwitch,
McLengthType IntervalType,
double Interval,
McLengthType DurationType,
double Duration,
McSource ValueSource
)
Function SetAxisCamSwitch(
Index As Integer,
Output As McOutput,
StartPosition As Double,
CyclicSwitch As McCamSwitch,
McLengthType As IntervalType,
Interval As Double,
DurationType As McLengthType,
Duration As Double,
ValueSource As McSource
) As KsCommandStatus
参数
Index [in]
型别:int
轴索引。索引以 0 为起始;别名将影响此参数。
Output [in]
型别:McOutput
选择对应轨道所控制的数位输出。
StartPosition [in]
型别:double
周期开始的位置。
CyclicSwitch [in]
型别:McCamSwitch
控制开关动作。
- TrackNumber:值必须为零。
- FirstOnPosition:值必须为非负,为各周期开始位置相关的距离。
- LastOnPosition:值必须为正,且较 FirstOnPosition 为大,为各周期开始位置相关的距离。
- Duration:值必须为正。
IntervalType [in]
型别:McLengthType
Interval 类型。可使用 mcDistance 与 mcTime。
Interval [in]
型别:double
周期长度。依照所选的 IntervalType 而定,值必须为正。
DurationType [in]
型别:McLengthType
Duration 类型。可使用 mcDistance 与 mcCount。
Duration [in]
型别:double
周期重复的持续时间,依照所选的 DurationType 而定,值必须为正。
ValueSource [in]
型别:McSource
定义轴值的来源,例如:位置。参见 McSource。
- mcCommandedValue, mcSetValue – 同步设定值。建议使用此设定。
- mcActualValue – 同步实际值。此设定可能不稳定。
- mcSecondEncoderValue – 从第二编码器读取的实际值。
回传值
回传 KsCommandStatus 类别。
备注
- McCamSwitch 为供应商特定的类别,用于定义数位凸轮的开关。
- McOutput 为供应商特定的结构,用于连接至(实体)输出,若使的是您个人的伺服驱动器的数位输出 (DO),需在 IApi.Start 前使用 IApi.EnableAxisOutput。
- 在 McCamSwitch 类别中,当 CamSwitchMode 选择为位置时不支援以下组合:
- IntervalType: mcTime;DurationType: mcDistance.
- IntervalType: mcTime;DurationType: mcCount.
- 当模数轴启用时,SetAxisCyclicSwitch 将不受影响,轴不会将位置视为模数位置。例如,若模数值为 360,当 FirstOnPosition 设为 360,LastOnPosition 设为 540,则轴旋转 1 圈时触发开启,旋转 1.5 圈时触发关闭。启用模数轴后,建议使用者:
- 使用 SetAxisPositionOffset 重设位置,以防止显示位置与内部位置不一致。例如,当模数值设为 360 时,使用者可能会看到位置为 0,而内部位置为 360000。
- 使用速度或距离 API 来触发开关。
范例
N/A
使用案例:
以下案例虽来自于 RT/Win32 介面,但有助于理解周期开关的运作方式。
案例 1
循环开关在持续时间内完成其任务。
McOutput outputBit = {
FALSE, //Axis or IO module. FALSE = I/O.
0, //Index
0 //Offset
}
McCamSwitch cyclicSwitch = {
0, //TrackNumber
40, //FirstOnPosition
60, //LastOnPosition
1, //AxisDirection. 1 = Positive.
0, //CamSwitchMode. 0 = Position.
0 //Duration. It is not used in this case.
);
Command = SetAxisCyclicSwitch(
TargetAxis, //Index
outputBit, //Output
100, //StartPosition
cyclicSwitch, //CyclicSwitch
mcDistance, //IntervalType
100, //Interval
mcDistance, //DurationType
250, //Duration
mcSetValue //ValueSource
);
案例 2
循环开关在完成任务之前中止。
McOutput outputBit = {
FALSE, //Axis or IO module. FALSE = I/O.
0, //Index
0 //Offset
}
McCamSwitch cyclicSwitch = {
0, //TrackNumber
0, //FirstOnPosition
0, //LastOnPosition
1, //AxisDirection. 1 = Positive.
1, //CamSwitchMode. 1 = Time.
0.003 //Duration
);
Command = SetAxisCyclicSwitch(
TargetAxis, //Index
outputBit, //Output
100, //StartPosition
cyclicSwitch, //CyclicSwitch
mcTime, //IntervalType
0.005, //Interval
mcCount, //DurationType
3, //Duration
mcSetValue //ValueSource
);
参见